﻿///////////////////////////////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2023, ООО 1С-Софт
// Все права защищены. Эта программа и сопроводительные материалы предоставляются 
// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0)
// Текст лицензии доступен по ссылке:
// https://creativecommons.org/licenses/by/4.0/legalcode
///////////////////////////////////////////////////////////////////////////////////////////////////////

#Область ПрограммныйИнтерфейс

#Область КонструкторыПараметровПрограммногоИнтерфейса

// Параметры подключения к администрируемому кластеру серверов.
//
// Возвращаемое значение:
//   Структура:
//     * ТипПодключения - Строка - возможные значения:
//                  "COM" - при подключении к агенту сервера с использованием COM-объекта V8*.ComConnector;
//                  "RAS" - при подключении к серверу администрирования (ras) с использованием консольного
//                  клиента сервера администрирования (rac);
//     * АдресАгентаСервера - Строка - сетевой адрес агента сервера (только при ТипПодключения = "COM");
//     * ПортАгентаСервера - Число - сетевой порт агента сервера (только при ТипПодключения = "COM"),
//                  типичное значение 1540;
//     * АдресСервераАдминистрирования - Строка - сетевой адрес сервера администрирования ras (только.
//                  При ТипПодключения = "RAS");
//     * ПортСервераАдминистрирования - Число - сетевой порт сервера администрирования ras (только при.
//                  ТипПодключения = "RAS"), типичное значение 1545;
//     * ПортКластера - Число - сетевой порт менеджера администрируемого кластера, типичное значение 1541;
//     * ИмяАдминистратораКластера - Строка - имя учетной записи администратора кластера (если для кластера
//                  не задан список администраторов - используется пустая строка);
//     * ПарольАдминистратораКластера - Строка - пароль учетной записи администратора кластера (если
//                  для кластера не задан список администраторов или для учетной записи не установлен пароль -
//                  используется пустая строка).
//
Функция ПараметрыАдминистрированияКластера() Экспорт
	
	Результат = Новый Структура();
	
	Результат.Вставить("ТипПодключения", "COM"); // "COM" или "RAS"
	
	// Только для "COM"
	Результат.Вставить("АдресАгентаСервера", "");
	Результат.Вставить("ПортАгентаСервера", 1540);
	
	// Только для "RAS"
	Результат.Вставить("АдресСервераАдминистрирования", "");
	Результат.Вставить("ПортСервераАдминистрирования", 1545);
	
	Результат.Вставить("ПортКластера", 1541);
	Результат.Вставить("ИмяАдминистратораКластера", "");
	Результат.Вставить("ПарольАдминистратораКластера", "");
	
	Возврат Результат;
	
КонецФункции

// Параметры подключения к администрируемой информационной базе кластера.
//
// Возвращаемое значение: 
//  Структура:
//    * ИмяВКластере - Строка - имя администрируемой информационной базы в кластере серверов,
//    * ИмяАдминистратораИнформационнойБазы - Строка - имя пользователя информационной базы с правами
//                  администратора (если для информационной базы не задан список пользователей ИБ - используется
//                  пустая строка),
//    * ПарольАдминистратораИнформационнойБазы - Строка - пароль пользователя информационной базы
//                  с правами администратора (если для информационной базы не задан список пользователей ИБ или
//                  для пользователя ИБ не установлен пароль - используется пустая строка).
//
Функция ПараметрыАдминистрированияИнформационнойБазыКластера() Экспорт
	
	Результат = Новый Структура();
	
	Результат.Вставить("ИмяВКластере", "");
	Результат.Вставить("ИмяАдминистратораИнформационнойБазы", "");
	Результат.Вставить("ПарольАдминистратораИнформационнойБазы", "");
	
	Возврат Результат;
	
КонецФункции

// Проверяет корректность параметров администрирования.
//
// Параметр ПараметрыАдминистрированияИБ может быть опущен в том случае, если аналогичные поля указаны 
// в параметре ПараметрыАдминистрированияКластера.
//
// Параметры:
//  ПараметрыАдминистрированияКластера - см. АдминистрированиеКластера.ПараметрыАдминистрированияКластера
//  ПараметрыАдминистрированияИБ - см. АдминистрированиеКластера.ПараметрыАдминистрированияИнформационнойБазыКластера
//  ПроверятьПараметрыАдминистрированияКластера - Булево - флаг необходимости проверки параметров администрирования 
//                  кластера.
//  ПроверятьПараметрыАдминистрированияИнформационнойБазы - Булево - флаг необходимости проверки параметров
//                  администрирования кластера.
//
Процедура ПроверитьПараметрыАдминистрирования(Знач ПараметрыАдминистрированияКластера, Знач ПараметрыАдминистрированияИБ = Неопределено,
	ПроверятьПараметрыАдминистрированияКластера = Истина,
	ПроверятьПараметрыАдминистрированияИнформационнойБазы = Истина) Экспорт
	
	Если ПараметрыАдминистрированияИБ = Неопределено Тогда
		ПараметрыАдминистрированияИБ = ПараметрыАдминистрированияКластера;
	КонецЕсли;
	
	МенеджерАдминистрирования = МенеджерАдминистрирования(ПараметрыАдминистрированияКластера);
	МенеджерАдминистрирования.ПроверитьПараметрыАдминистрирования(ПараметрыАдминистрированияКластера, ПараметрыАдминистрированияИБ, ПроверятьПараметрыАдминистрированияИнформационнойБазы, ПроверятьПараметрыАдминистрированияКластера);
	
КонецПроцедуры

#КонецОбласти

#Область БлокировкаСеансовИРегламентныхЗаданий

// Свойства блокировки сеансов и регламентных заданий информационной базы.
//
// Возвращаемое значение: 
//   Структура:
//     * БлокировкаСеансов - Булево - флаг установки блокировки новых сеансов с информационной базой,
//     * ДатаС - Дата - момент начала блокировки новых сеансов с информационной базой,
//     * ДатаПо - Дата - момент окончания блокировки новых сеансов с информационной базой,
//     * Сообщение - Строка - сообщение, отображаемое пользователю при попытке установки нового сеанса
//                            с информационной базой при установленной блокировке новых сеансов,
//     * КодРазрешения - Строка - код обхода блокировки новых сеансов с информационной базой,
//     * БлокировкаРегламентныхЗаданий - Булево - флаг блокировки выполнения регламентных заданий информационной базы.
//
Функция СвойстваБлокировкиСеансовИРегламентныхЗаданий() Экспорт
	
	Результат = Новый Структура();
	
	Результат.Вставить("БлокировкаСеансов");
	Результат.Вставить("ДатаС");
	Результат.Вставить("ДатаПо");
	Результат.Вставить("Сообщение");
	Результат.Вставить("КодРазрешения");
	Результат.Вставить("ПараметрБлокировки");
	Результат.Вставить("БлокировкаРегламентныхЗаданий");
	
	Возврат Результат;
	
КонецФункции

// Возвращает текущее состояние блокировки сеансов и регламентных заданий для информационной базы.
//
// Параметр ПараметрыАдминистрированияИБ может быть опущен в том случае, если аналогичные поля указаны 
// в параметре ПараметрыАдминистрированияКластера.
//
// Параметры:
//  ПараметрыАдминистрированияКластера - см. АдминистрированиеКластера.ПараметрыАдминистрированияКластера
//  ПараметрыАдминистрированияИБ - см. АдминистрированиеКластера.ПараметрыАдминистрированияИнформационнойБазыКластера
//
// Возвращаемое значение: 
//   см. АдминистрированиеКластера.СвойстваБлокировкиСеансовИРегламентныхЗаданий
//
Функция БлокировкаСеансовИЗаданийИнформационнойБазы(Знач ПараметрыАдминистрированияКластера, Знач ПараметрыАдминистрированияИБ = Неопределено) Экспорт
	
	Если ПараметрыАдминистрированияИБ = Неопределено Тогда
		ПараметрыАдминистрированияИБ = ПараметрыАдминистрированияКластера;
	КонецЕсли;
	
	МенеджерАдминистрирования = МенеджерАдминистрирования(ПараметрыАдминистрированияКластера);
	
	Результат = МенеджерАдминистрирования.БлокировкаСеансовИЗаданийИнформационнойБазы(
		ПараметрыАдминистрированияКластера,
		ПараметрыАдминистрированияИБ);
	
	Возврат Результат;
	
КонецФункции

// Устанавливает новое состояние блокировки сеансов и регламентных заданий для информационной базы.
//
// Параметры:
//  ПараметрыАдминистрированияКластера - см. АдминистрированиеКластера.ПараметрыАдминистрированияКластера
//  ПараметрыАдминистрированияИБ - см. АдминистрированиеКластера.ПараметрыАдминистрированияИнформационнойБазыКластера
//  СвойстваБлокировкиСеансовИЗаданий - см. АдминистрированиеКластера.СвойстваБлокировкиСеансовИРегламентныхЗаданий
//
Процедура УстановитьБлокировкуСеансовИЗаданийИнформационнойБазы(Знач ПараметрыАдминистрированияКластера, Знач ПараметрыАдминистрированияИБ, Знач СвойстваБлокировкиСеансовИЗаданий) Экспорт
	
	Если ПараметрыАдминистрированияИБ = Неопределено Тогда
		ПараметрыАдминистрированияИБ = ПараметрыАдминистрированияКластера;
	КонецЕсли;
	
	МенеджерАдминистрирования = МенеджерАдминистрирования(ПараметрыАдминистрированияКластера);
	
	МенеджерАдминистрирования.УстановитьБлокировкуСеансовИЗаданийИнформационнойБазы(
		ПараметрыАдминистрированияКластера,
		ПараметрыАдминистрированияИБ,
		СвойстваБлокировкиСеансовИЗаданий);
	
КонецПроцедуры

// Снимает блокировку сеансов и регламентных заданий для информационной базы.
//
// Параметр ПараметрыАдминистрированияИБ может быть опущен в том случае, если аналогичные поля указаны 
// в параметре ПараметрыАдминистрированияКластера.
//
// Параметры:
//   ПараметрыАдминистрированияКластера - см. АдминистрированиеКластера.ПараметрыАдминистрированияКластера
//   ПараметрыАдминистрированияИБ - см. АдминистрированиеКластера.ПараметрыАдминистрированияИнформационнойБазыКластера
//
Процедура СнятьБлокировкуСеансовИЗаданийИнформационнойБазы(Знач ПараметрыАдминистрированияКластера, Знач ПараметрыАдминистрированияИБ = Неопределено) Экспорт
	
	Если ПараметрыАдминистрированияИБ = Неопределено Тогда
		ПараметрыАдминистрированияИБ = ПараметрыАдминистрированияКластера;
	КонецЕсли;
	
	СвойстваБлокировки = СвойстваБлокировкиСеансовИРегламентныхЗаданий();
	СвойстваБлокировки.БлокировкаСеансов = Ложь;
	СвойстваБлокировки.ДатаС = Неопределено;
	СвойстваБлокировки.ДатаПо = Неопределено;
	СвойстваБлокировки.Сообщение = "";
	СвойстваБлокировки.КодРазрешения = "";
	СвойстваБлокировки.БлокировкаРегламентныхЗаданий = Ложь;
	
	УстановитьБлокировкуСеансовИЗаданийИнформационнойБазы(
		ПараметрыАдминистрированияКластера,
		ПараметрыАдминистрированияИБ,
		СвойстваБлокировки);
	
КонецПроцедуры

#КонецОбласти

#Область БлокировкаРегламентныхЗаданий

// Возвращает текущее состояние блокировки регламентных заданий для информационной базы.
//
// Параметр ПараметрыАдминистрированияИБ может быть опущен в том случае, если аналогичные поля указаны 
// в параметре ПараметрыАдминистрированияКластера.
//
// Параметры:
//  ПараметрыАдминистрированияКластера - см. АдминистрированиеКластера.ПараметрыАдминистрированияКластера
//  ПараметрыАдминистрированияИБ - см. АдминистрированиеКластера.ПараметрыАдминистрированияИнформационнойБазыКластера
//
// Возвращаемое значение: 
//  Булево - блокировка установлена.
//
Функция БлокировкаРегламентныхЗаданийИнформационнойБазы(Знач ПараметрыАдминистрированияКластера, Знач ПараметрыАдминистрированияИБ = Неопределено) Экспорт
	
	Если ПараметрыАдминистрированияИБ = Неопределено Тогда
		ПараметрыАдминистрированияИБ = ПараметрыАдминистрированияКластера;
	КонецЕсли;
	
	МенеджерАдминистрирования = МенеджерАдминистрирования(ПараметрыАдминистрированияКластера);
	
	Результат = МенеджерАдминистрирования.БлокировкаРегламентныхЗаданийИнформационнойБазы(
		ПараметрыАдминистрированияКластера,
		ПараметрыАдминистрированияИБ);
	
	Возврат Результат;
	
КонецФункции

// Устанавливает новое состояние блокировки регламентных заданий для информационной базы.
//
// Параметр ПараметрыАдминистрированияИБ может быть опущен в том случае, если аналогичные поля указаны 
// в параметре ПараметрыАдминистрированияКластера.
//
// Параметры:
//  ПараметрыАдминистрированияКластера - см. АдминистрированиеКластера.ПараметрыАдминистрированияКластера
//  ПараметрыАдминистрированияИБ - см. АдминистрированиеКластера.ПараметрыАдминистрированияИнформационнойБазыКластера
//  БлокировкаРегламентныхЗаданий - Булево - флаг установки блокировки регламентных заданий информационной базы.
//
Процедура УстановитьБлокировкуРегламентныхЗаданийИнформационнойБазы(Знач ПараметрыАдминистрированияКластера, Знач ПараметрыАдминистрированияИБ, Знач БлокировкаРегламентныхЗаданий) Экспорт
	
	Если ПараметрыАдминистрированияИБ = Неопределено Тогда
		ПараметрыАдминистрированияИБ = ПараметрыАдминистрированияКластера;
	КонецЕсли;
	
	МенеджерАдминистрирования = МенеджерАдминистрирования(ПараметрыАдминистрированияКластера);
	
	МенеджерАдминистрирования.УстановитьБлокировкуРегламентныхЗаданийИнформационнойБазы(
		ПараметрыАдминистрированияКластера,
		ПараметрыАдминистрированияИБ,
		БлокировкаРегламентныхЗаданий);
	
КонецПроцедуры

#КонецОбласти

#Область СеансыИнформационнойБазы

// Свойства сеанса информационной базы.
//
// Возвращаемое значение: 
//   Структура:
//     * Номер - Число - номер сеанса. Уникален среди всех сеансов информационной базы,
//     * ИмяПользователя - Строка - имя аутентифицированного пользователя информационной базы,
//     * ИмяКлиентскогоКомпьютера - Строка - имя или сетевой адрес компьютера, установившего
//          сеанс с информационной базой,
//     * ИдентификаторКлиентскогоПриложения - Строка - идентификатор приложения, установившего сеанс.
//          Возможные значения - см. описание к функции глобального контекста ПредставлениеПриложения(),
//     * ИдентификаторЯзыка - Строка - идентификатор языка интерфейса,
//     * МоментСозданияСеанса - Дата - момент установки сеанса,
//     * МоментПоследнейАктивностиСеанса - Дата - момент последней активности сеанса,
//     * Блокировка - Число - номер сеанса, который является причиной ожидания управляемой транзакционной
//          блокировки в том случае, если сеанс выполняет установку управляемых транзакционных блокировок
//          и ожидает снятия блокировок, установленных другим сеансом (иначе - значение равно 0),
//     * БлокировкаСУБД - Число - номер сеанса, который является причиной ожидания транзакционной
//          блокировки в том случае, если сеанс исполняет запрос к СУБД и ожидает транзакционную
//          блокировку, установленную другим сеансом (иначе - значение равно 0),
//     * Передано - Число - объем данных, переданных меду сервером "1С:Предприятия" и клиентским приложением
//          данного сеанса с момента начала сеанса (в байтах),
//     * ПереданоЗа5Минут - Число - объем данных, переданных между сервером "1С:Предприятия" и клиентским
//          приложением данного сеанса за последние 5 минут (в байтах),
//     * СерверныхВызовов - Число - количество вызовов сервера "1С:Предприятия" от имена данного сеанса с
//          момента начала сеанса,
//     * СерверныхВызововЗа5Минут - Число - количество вызовов сервера "1С:Предприятия" от имени данного сеанса
//          за последние 5 минут,
//     * ДлительностьСерверныхВызовов - Число - время исполнения вызовов сервера "1С:Предприятия" от имени
//          данного сеанса с момента начала сеанса (в секундах),
//     * ДлительностьТекущегоСерверногоВызова - Число - интервал времени в миллисекундах, прошедший с момента начала
//          обращения, в случае, если сеанс выполняется вызов сервера "1С:Предприятия" (иначе - значение равно 0),
//     * ДлительностьСерверныхВызововЗа5Минут - Число - время исполнения вызовов сервера 1С:Предприятия от имени
//          данного сеанса за последние 5 минут (в миллисекундах),
//     * ПереданоСУБД - Число - количество данных, переданных и полученных от СУБД от имени данного сеанса с
//          момента начала сеанса (в байтах),
//     * ПереданоСУБДЗа5Минут - Число - количество данных, переданных и полученных от СУБД от имени данного сеанса
//          за последние 5 минут (в байтах),
//     * ДлительностьВызововСУБД - Число - время исполнения запросов к СУБД от имени данного сеанса с момента начала
//          сеанса (в миллисекундах),
//     * ДлительностьТекущегоВызоваСУБД - Число - интервал времени в миллисекундах, прошедший с начала выполнения
//          запроса в случае, если сеанс выполняет запрос к СУБД (иначе - значение равно 0),
//     * ДлительностьВызововСУБДЗа5Минут - Число - суммарное время исполнения запросов к СУБД от имени данного сеанса
//          за последние 5 минут (в миллисекундах).
//     * СоединениеСУБД - Строка - номер соединения с СУБД в терминах СУБД в том случае, если в момент получения списка
//          сеансов выполняется запрос к СУБД, открыта транзакция или определены временные таблицы (т.е. захвачено
//          соединение с СУБД). Если соединение с СУБД не захвачено - значение равно пустой строке,
//     * ВремяСоединенияСУБД - Число - время соединения с СУБД с момента захвата (в миллисекундах). Если соединение с.
//          СУБД не захвачено - значение равно 0,
//     * МоментЗахватаСоединенияСУБД - Дата - момент времени, когда соединение с СУБД было последний раз
//          захвачено другим сеансом.
//     * ОписаниеСоединения - Структура
//                          - Неопределено - содержит описание соединения, которому назначен сеанс, 
//                  описание полей см. АдминистрированиеКластера.СвойстваОписанияСоединения. Иначе - Неопределено.
//     * Спящий - Булево - сеанс находится в спящем режиме.
//     * ЗавершитьЧерез - Число - интервал времени в секундах, по истечении которого спящий сеанс завершается.
//     * ЗаснутьЧерез - Число - интервал времени в секундах, по истечении которого неактивный сеанс переводится в спящий
//                              режим.
//     * ПрочитаноСДиска - Число - содержит количество данных в байтах, прочитанных с диска сеансом с момента начала сеанса.
//     * ПрочитаноСДискаВТекущемВызове - Число - содержит количество данных в байтах, прочитанных с диска с начала 
//                  выполнения текущего вызова.
//     * ПрочитаноСДискаЗа5Минут - Число - содержит количество данных в байтах, прочитанных с диска сеансом за последние
//                                         5 минут.
//     * Лицензия - Структура
//                - Неопределено - содержит информацию о клиентской лицензии, используемой этим сеансом,
//                  описание полей см. АдминистрированиеКластера.СвойстваЛицензии. 
//                  Неопределено, если сеанс не использует лицензию.
//     * ЗанятоПамяти - Число - содержит объем памяти в байтах, занятый в процессе вызовов с момента начала сеанса.
//     * ЗанятоПамятиВТекущемВызове - Число - содержит объем памяти в байтах, занятый с начала выполнения текущего вызова. 
//                  Если в данный момент вызов не выполняется, содержит 0.
//     * ЗанятоПамятиЗа5Минут - Число - содержит объем памяти в байтах, занятый в процессе вызовов за последние 5 минут.
//     * ЗаписаноНаДиск - Число - содержит количество данных в байтах, записанных на диск сеансом с момента начала сеанса.
//     * ЗаписаноНаДискВТекущемВызове - Число - содержит количество данных в байтах, записанных на диск с начала
//                  выполнения текущего вызова.
//     * ЗаписаноНаДискЗа5Минут - Число - содержит количество данных в байтах, записанных на диск сеансом за последние 5
//                                        минут.
//     * РабочийПроцесс - Структура
//                      - Неопределено - содержит рабочий процесс, с которым установлено соединение, если 
//                  сеанс назначен соединению, описание полей см. АдминистрированиеКластера.СвойстваРабочегоПроцесса. 
//                  Иначе - Неопределено. 
//
Функция СвойстваСеанса() Экспорт
	
	Результат = Новый Структура();
	
	Результат.Вставить("Номер");
	Результат.Вставить("ИмяПользователя");
	Результат.Вставить("ИмяКлиентскогоКомпьютера");
	Результат.Вставить("ИдентификаторКлиентскогоПриложения");
	Результат.Вставить("ИдентификаторЯзыка");
	Результат.Вставить("МоментСозданияСеанса");
	Результат.Вставить("МоментПоследнейАктивностиСеанса");
	Результат.Вставить("Блокировка");
	Результат.Вставить("БлокировкаСУБД");
	Результат.Вставить("Передано");
	Результат.Вставить("ПереданоЗа5Минут");
	Результат.Вставить("СерверныхВызовов");
	Результат.Вставить("СерверныхВызововЗа5Минут");
	Результат.Вставить("ДлительностьСерверныхВызовов");
	Результат.Вставить("ДлительностьТекущегоСерверногоВызова");
	Результат.Вставить("ДлительностьСерверныхВызововЗа5Минут");
	Результат.Вставить("ПереданоСУБД");
	Результат.Вставить("ПереданоСУБДЗа5Минут");
	Результат.Вставить("ДлительностьВызововСУБД");
	Результат.Вставить("ДлительностьТекущегоВызоваСУБД");
	Результат.Вставить("ДлительностьВызововСУБДЗа5Минут");
	Результат.Вставить("СоединениеСУБД");
	Результат.Вставить("ВремяСоединенияСУБД");
	Результат.Вставить("МоментЗахватаСоединенияСУБД");
	Результат.Вставить("ОписаниеСоединения");
	Результат.Вставить("Спящий");
	Результат.Вставить("ЗавершитьЧерез");
	Результат.Вставить("ЗаснутьЧерез");
	Результат.Вставить("ПрочитаноСДиска");
	Результат.Вставить("ПрочитаноСДискаВТекущемВызове");
	Результат.Вставить("ПрочитаноСДискаЗа5Минут");
	Результат.Вставить("Лицензия");
	Результат.Вставить("ЗанятоПамяти");
	Результат.Вставить("ЗанятоПамятиВТекущемВызове");
	Результат.Вставить("ЗанятоПамятиЗа5Минут");
	Результат.Вставить("ЗаписаноНаДиск");
	Результат.Вставить("ЗаписаноНаДискВТекущемВызове");
	Результат.Вставить("ЗаписаноНаДискЗа5Минут");
	Результат.Вставить("РабочийПроцесс");
	
	Возврат Результат;
	
КонецФункции

// Свойства лицензии.
//
// Возвращаемое значение: 
//   Структура:
//     * ИмяФайла - Строка - содержит полное имя используемого файла программной лицензии. 
//     * ПолноеПредставление - Строка - содержит локализованное строковое представление лицензии, как в свойстве
//                  "Лицензия" диалога свойств сеанса или свойств рабочего процесса консоли кластера
//     * КраткоеПредставление - Строка - содержит локализованное строковое представление лицензии, как в колонке
//                  "Лицензия" списка сеансов или рабочих процессов.
//     * ВыданаСервером - Булево - Истина - лицензия получена сервером "1С:Предприятия" и выдана клиентскому приложению.
//                  Ложь - лицензия получена клиентским приложением.
//     * ТипЛицензии - Число - содержит тип лицензии: 
//                  0 - программная лицензия платформы; 
//                  1 - аппаратная лицензия (ключ защиты программы).
//     * МаксимальноеКоличествоПользователейДляКомплекта - Число - содержит максимальное количество пользователей, 
//                  допустимое для данного комплекта, если используется программная лицензия платформы. Иначе совпадает
//                  с значением свойства MaxUsersCur.
//     * МаксимальноеКоличествоПользователейВКлюче - Число - содержит максимальное количество пользователей в 
//                  используемом ключе защиты программы или в используемом файле программной лицензии.
//     * ЛицензияПолученаЧерезAladdinLicenseManager - Булево - Истина, если для аппаратной лицензии ключ защиты программы
//                  является сетевым, лицензия получена через менеджер лицензий Aladdin License Manager; Ложь в
//                  противном случае.
//     * АдресПроцесса - Строка - содержит адрес сервера, на котором запущен процесс, получивший лицензию.
//     * ИдентификаторПроцесса - Строка - содержит идентификатор процесса, получившего лицензию, присвоенный ему
//                  операционной системой.
//     * ПортПроцесса - Число - содержит номер IP-порта серверного процесса, получившего лицензию.
//     * СерияКлюча - Строка - содержит серию ключа защиты программы для аппаратной лицензии или регистрационный номер
//                  комплекта для программной лицензии платформы.
//
Функция СвойстваЛицензии() Экспорт
	
	Результат = Новый Структура();
	
	Результат.Вставить("ИмяФайла");
	Результат.Вставить("ПолноеПредставление");
	Результат.Вставить("КраткоеПредставление");
	Результат.Вставить("ВыданаСервером");
	Результат.Вставить("ТипЛицензии");
	Результат.Вставить("МаксимальноеКоличествоПользователейДляКомплекта");
	Результат.Вставить("МаксимальноеКоличествоПользователейВКлюче");
	Результат.Вставить("ЛицензияПолученаЧерезAladdinLicenseManager");
	Результат.Вставить("АдресПроцесса");
	Результат.Вставить("ИдентификаторПроцесса");
	Результат.Вставить("ПортПроцесса");
	Результат.Вставить("СерияКлюча");
	
	Возврат Результат;
	
КонецФункции

// Свойства описания соединения.
//
// Возвращаемое значение: 
//   Структура:
//     * ИмяПриложения - Строка - содержит имя приложения, установившего соединение с фермой серверов "1С:Предприятия".
//     * Блокировка - Число - содержит идентификатор соединения, блокирующего работу данного соединения (в Сервисе 
//                  транзакционных блокировок).
//     * МоментУстановкиСоединения - Дата - содержит момент времени, когда соединение было установлено.
//     * Номер - Число - содержит идентификатор соединения. Позволяет различить разные соединения, установленные одним
//                  и тем же приложением с одного и того же клиентского компьютера
//     * ИмяКлиентскогоКомпьютера - Строка - содержит имя пользовательского компьютера, с которого установлено соединение.
//     * НомерСеанса - Число - содержит номер сеанса, если соединению назначен сеанс, иначе - 0.
//     * РабочийПроцесс - Структура - содержит интерфейс объекта с описанием серверного процесса, с которым установлено
//                  данное соединение.
//
Функция СвойстваОписанияСоединения() Экспорт
	
	Результат = Новый Структура();
	
	Результат.Вставить("ИмяПриложения");
	Результат.Вставить("Блокировка");
	Результат.Вставить("МоментУстановкиСоединения");
	Результат.Вставить("Номер");
	Результат.Вставить("ИмяКлиентскогоКомпьютера");
	Результат.Вставить("НомерСеанса");
	Результат.Вставить("РабочийПроцесс");
	
	Возврат Результат;
	
КонецФункции

// Свойства рабочего процесса.
//
// Возвращаемое значение:
//   Структура:
//     * ДоступнаяПроизводительность - Число - средняя за последние 5 минут доступная производительность. Определяется
//                  по времени реакции рабочего процесса на эталонный запрос. В соответствии с доступной 
//                  производительностью кластер серверов принимает решение о распределении клиентов между рабочими
//                  процессами.
//     * ЗатраченоКлиентом - Число - показывает среднее время, затрачиваемое рабочим процессом на обратные вызовы
//                  методов клиентского приложения при выполнении одного клиентского обращения
//     * РеакцияСервера - Число - показывает среднее время обслуживания рабочим процессом одного клиентского обращения.
//                  Оно складывается из: значений свойств ЗатраченоСервером, ЗатраченоСУБД, ЗатраченоМенеджеромБлокировок,
//                  ЗатраченоКлиентом.
//     * ЗатраченоСУБД - Число - показывает среднее время, затрачиваемое рабочим процессом на обращения к серверу баз
//                  данных при выполнении одного клиентского обращения.
//     * ЗатраченоМенеджеромБлокировок - Число - показывает среднее время обращения к менеджеру блокировок.
//     * ЗатраченоСервером - Число - показывает среднее время, затрачиваемое самим рабочим процессом на выполнение
//                  одного клиентского обращения.
//     * КлиентскихПотоков - Число - показывает среднее количество клиентских потоков, исполняемых рабочим процессом кластера.
//     * ОтносительнаяПроизводительность - Число - относительная производительность процесса. Может находиться в 
//                  диапазоне от 1 до 1000. Используется в процессе выбора рабочего процесса, к которому будет
//                  подсоединен очередной клиент. Клиенты распределяются между рабочими процессами пропорционально
//                  производительности рабочих процессов.
//     * Соединений - Число - количество соединений рабочего процесса с пользовательскими приложениями.
//     * ИмяКомпьютера - Строка - содержит имя или IP-адрес компьютера, на котором должен быть запущен рабочий процесс.
//     * Включен - Булево - устанавливается кластером при необходимости запустить или остановить рабочий процесс.
//                  Истина - процесс должен быть запущен и будет запущен при возможности. 
//                  Ложь - процесс должен быть остановлен и будет остановлен после отсоединения всех пользователей или
//                  после истечения времени, заданного настройками кластера.
//     * Порт - Число - содержит номер основного IP-порта рабочего процесса. Этот порт выделяется динамически при старте
//                  рабочего процесса из диапазонов портов, определенных для соответствующего рабочего сервера.
//     * ПревышениеНадКритическимЗначением - Число - содержит время, в течение которого объем виртуальной памяти
//                  рабочего процесса превышает критическое значение, установленное для кластера, в секундах.
//     * ЗанятоПамяти - Число - содержит объем виртуальной памяти, занимаемой рабочим процессом, в килобайтах.
//     * Идентификатор - Строка - идентификатор активного рабочего процесса в терминах операционной системы.
//     * Запущен - Число - состояние рабочего процесса.
//                  0 - процесс неактивен (либо не загружен в память, либо не может выполнять клиентские запросы); 
//                  1 - процесс активен (работает). 
//     * КоличествоВызововПоКоторымПосчитанаСтатистика - Число - количество вызовов, по которым посчитана статистика.
//     * МоментЗапуска - Дата - содержит момент запуска рабочего процесса. Если процесс не запущен, то пустая дата.
//     * Использование - Число - определяет использование рабочего процесса кластером. Устанавливается администратором. 
//                  Возможные значения: 
//                     0 - не использовать, процесс не должен быть запущен; 
//                     1 - использовать, процесс должен быть запущен; 
//                     2 - использовать как резервный, процесс должен быть запущен только при невозможности запуска
//                         процесса со значением 1 этого свойства.
//     * Лицензия - Структура
//                - Неопределено - содержит информацию о серверной лицензии, используемой рабочим процессом. 
//                  Неопределено - рабочий процесс не использует серверную лицензию.
//
Функция СвойстваРабочегоПроцесса() Экспорт
	
	Результат = Новый Структура();
	
	Результат.Вставить("ДоступнаяПроизводительность");
	Результат.Вставить("ЗатраченоКлиентом");
	Результат.Вставить("РеакцияСервера");
	Результат.Вставить("ЗатраченоСУБД");
	Результат.Вставить("ЗатраченоМенеджеромБлокировок");
	Результат.Вставить("ЗатраченоСервером");
	Результат.Вставить("КлиентскихПотоков");
	Результат.Вставить("ОтносительнаяПроизводительность");
	Результат.Вставить("Соединений");
	Результат.Вставить("ИмяКомпьютера");
	Результат.Вставить("Включен");
	Результат.Вставить("Порт");
	Результат.Вставить("ПревышениеНадКритическимЗначением");
	Результат.Вставить("ЗанятоПамяти");
	Результат.Вставить("Идентификатор");
	Результат.Вставить("Запущен");
	Результат.Вставить("КоличествоВызововПоКоторымПосчитанаСтатистика");
	Результат.Вставить("МоментЗапуска");
	Результат.Вставить("Использование");
	Результат.Вставить("Лицензия");
	
	Возврат Результат;
	
КонецФункции

// Возвращает описания сеансов информационной базы.
//
// Параметр ПараметрыАдминистрированияИБ может быть опущен в том случае, если аналогичные поля указаны 
// в параметре ПараметрыАдминистрированияКластера.
// Если в параметре Фильтр задана структура (см. АдминистрированиеКластера.ФильтрСеансов), то 
// сравнение всегда выполняется на равенство.
//
// Параметры:
//   ПараметрыАдминистрированияКластера - см. АдминистрированиеКластера.ПараметрыАдминистрированияКластера
//   ПараметрыАдминистрированияИБ - см. АдминистрированиеКластера.ПараметрыАдминистрированияИнформационнойБазыКластера
//   Фильтр - Массив из см. АдминистрированиеКластера.ФильтрСеансов
//          - см. АдминистрированиеКластера.ФильтрСеансов
//
// Возвращаемое значение: 
//   Массив из см. АдминистрированиеКластера.СвойстваСеанса
//
Функция СеансыИнформационнойБазы(Знач ПараметрыАдминистрированияКластера, Знач ПараметрыАдминистрированияИБ = Неопределено, 
	Знач Фильтр = Неопределено) Экспорт
	
	Если ПараметрыАдминистрированияИБ = Неопределено Тогда
		ПараметрыАдминистрированияИБ = ПараметрыАдминистрированияКластера;
	КонецЕсли;
	
	МенеджерАдминистрирования = МенеджерАдминистрирования(ПараметрыАдминистрированияКластера);
	
	Возврат МенеджерАдминистрирования.СеансыИнформационнойБазы(
		ПараметрыАдминистрированияКластера,
		ПараметрыАдминистрированияИБ,
		Фильтр);
	
КонецФункции

// Удаляет сеансы с информационной базой по фильтру.
//
// Параметр ПараметрыАдминистрированияИБ может быть опущен в том случае, если аналогичные поля указаны 
// в параметре ПараметрыАдминистрированияКластера.
// Если в параметре Фильтр задана структура (см. АдминистрированиеКластера.ФильтрСеансов), то 
// сравнение всегда выполняется на равенство.
//
// Параметры:
//   ПараметрыАдминистрированияКластера - см. АдминистрированиеКластера.ПараметрыАдминистрированияКластера
//   ПараметрыАдминистрированияИБ - см. АдминистрированиеКластера.ПараметрыАдминистрированияИнформационнойБазыКластера
//   Фильтр - Массив из см. АдминистрированиеКластера.ФильтрСеансов
//          - см. АдминистрированиеКластера.ФильтрСеансов
//
Процедура УдалитьСеансыИнформационнойБазы(Знач ПараметрыАдминистрированияКластера, Знач ПараметрыАдминистрированияИБ = Неопределено, 
	Знач Фильтр = Неопределено) Экспорт
	
	Если ПараметрыАдминистрированияИБ = Неопределено Тогда
		ПараметрыАдминистрированияИБ = ПараметрыАдминистрированияКластера;
	КонецЕсли;
	
	МенеджерАдминистрирования = МенеджерАдминистрирования(ПараметрыАдминистрированияКластера);
	
	МенеджерАдминистрирования.УдалитьСеансыИнформационнойБазы(
		ПараметрыАдминистрированияКластера,
		ПараметрыАдминистрированияИБ,
		Фильтр);
	
КонецПроцедуры

// Свойства фильтра сеансов.
// Для использования в функциях СеансыИнформационнойБазы, УдалитьСеансыИнформационнойБазы и аналогичных. 
//
// Возвращаемое значение:
//   Структура:
//     * Свойство - Строка - имя свойства, по которому осуществляется фильтрация. 
//                  Допустимые значения - см. возвращаемое значение функции АдминистрированиеКластера.СвойстваСеанса.
//     * ВидСравнения - ВидСравнения - вид сравнения значений сеансов с указанным в условии фильтра. 
//                  Допустимые значения:
//                  ВидСравнения.Равно,
//                  ВидСравнения.НеРавно,
//                  ВидСравнения.Больше (только для числовых значений),
//                  ВидСравнения.БольшеИлиРавно (только для числовых значений),
//                  ВидСравнения.Меньше (только для числовых значений),
//                  ВидСравнения.МеньшеИлиРавно (только для числовых значений),
//                  ВидСравнения.ВСписке,
//                  ВидСравнения.НеВСписке,
//                  ВидСравнения.Интервал (только для числовых значений),
//                  ВидСравнения.ИнтервалВключаяГраницы (только для числовых значений),
//                  ВидСравнения.ИнтервалВключаяНачало (только для числовых значений),
//                  ВидСравнения.ИнтервалВключаяОкончание (только для числовых значений).
//     * Значение - Число
//                - Строка
//                - Дата
//                - Булево
//                - СписокЗначений
//                - Массив
//                - Структура - значение, с которым
//               сравнивается значение соответствующего свойства сеанса. При ВидСравнения.ВСписке и ВидСравнения.НеВСписке
//               в качестве значения должны передаваться СписокЗначений или Массив, содержащие набор значений, с которыми
//               будет выполняться сравнение. При ВидСравнения.Интервал, ВидСравнения.ИнтервалВключаяГраницы,
//               ВидСравнения.ИнтервалВключаяНачало и ВидСравнения.ИнтервалВключаяОкончание в качестве значения должны
//               передаваться структуры с полями С и По, значения которых образуют интервал, с которым будет выполняться
//               соответствующее сравнение.
//
Функция ФильтрСеансов() Экспорт
	
	Результат = Новый Структура();
	
	Результат.Вставить("Свойство");
	Результат.Вставить("ВидСравнения", ВидСравнения.Равно);
	Результат.Вставить("Значение");
	
	Возврат Результат;
	
КонецФункции

#КонецОбласти

#Область СоединенияСИнформационнойБазой

// Свойства соединения с информационной базой.
//
// Возвращаемое значение: 
//   Структура:
//     * Номер - Число - номер соединения с информационной базой.
//     * ИмяПользователя - Строка - имя пользователя 1С:Предприятия, подсоединенного к информационной базе.
//     * ИмяКлиентскогоКомпьютера - Строка - имя компьютера, с которого установлено соединение.
//     * ИдентификаторКлиентскогоПриложения - Строка - идентификатор приложения, установившего соединение.
//                  Возможные значения - см. описание к функции глобального контекста ПредставлениеПриложения(),
//     * МоментУстановкиСоединения - Дата - момент установки соединения.
//     * РежимСоединенияСИнформационнойБазой - Число - режим соединения с информационной базой (0 -
//                  разделяемый, 1 - монопольный),
//     * РежимСоединенияСБазойДанных - Число - режим соединения с базой данных (0 - соединение не установлено,
//                  1 - разделяемый, 2 - монопольный).
//     * БлокировкаСУБД - Число - идентификатор соединения, блокирующего работу данного соединения в СУБД.
//     * Передано - Число - объем данных, полученных и отправленных соединением.
//     * ПереданоЗа5Минут - Число - объем данных, полученных и отправленных соединением за последние 5 минут.
//     * СерверныхВызовов - Число - количество серверных вызовов.
//     * СерверныхВызововЗа5Минут - Число - количество серверных вызовов соединения за последние 5 минут.
//     * ПереданоСУБД - Число - объем данных, переданных между сервером 1С:Предприятия и сервером баз данных,
//                  с момента установки данного соединения,
//     * ПереданоСУБДЗа5Минут - Число - объем данных, переданных между сервером 1С:Предприятия и сервером баз
//                  данных за последние 5 минут,
//     * СоединениеСУБД - Строка - идентификатор процесса соединения с СУБД (если на момент получения списка
//                  соединений данное соединение выполняло обращение к серверу СУБД, в противном случае - значение равно
//                  пустой строке). Идентификатор возвращается в терминах сервера СУБД.
//     * ВремяСУБД - Число - время в секундах, в течении которого выполняется обращение к серверу СУБД (если на момент
//                  получения списка соединений данное соединение выполняло обращение к серверу СУБД, в противном случае
//                  значение равно 0).
//     * МоментЗахватаСоединенияСУБД - Дата - момент последнего захвата соединения с сервером СУБД.
//     * ДлительностьСерверныхВызовов - Число - длительность всех серверных вызовов соединения.
//     * ДлительностьВызововСУБД - Число - время вызовов СУБД, инициированных соединением.
//     * ДлительностьТекущегоСерверногоВызова - Число - длительность текущего серверного вызова.
//     * ДлительностьТекущегоВызоваСУБД - Число - длительность текущего вызова сервера СУБД.
//     * ДлительностьСерверныхВызововЗа5Минут - Число - длительность серверных вызовов соединения за последние 5 минут.
//     * ДлительностьВызововСУБДЗа5Минут - Число - длительность вызовов соединения СУБД за последние 5 минут.
//     * ПрочитаноСДиска - Число - содержит количество данных в байтах, прочитанных с диска сеансом с момента начала сеанса.
//     * ПрочитаноСДискаВТекущемВызове - Число - содержит количество данных в байтах, прочитанных с диска с начала
//                  выполнения текущего вызова.
//     * ПрочитаноСДискаЗа5Минут - Число - содержит количество данных в байтах, прочитанных с диска сеансом за 
//                  последние 5 минут.
//     * ЗанятоПамяти - Число - содержит объем памяти в байтах, занятый в процессе вызовов с момента начала сеанса.
//     * ЗанятоПамятиВТекущемВызове - Число - содержит объем памяти в байтах, занятый с начала выполнения текущего
//                  вызова. Если в данный момент вызов не выполняется, содержит 0.
//     * ЗанятоПамятиЗа5Минут - Число - содержит объем памяти в байтах, занятый в процессе вызовов за последние 5 минут.
//     * ЗаписаноНаДиск - Число - содержит количество данных в байтах, записанных на диск сеансом с момента начала сеанса.
//     * ЗаписаноНаДискВТекущемВызове - Число - содержит количество данных в байтах, записанных на диск с начала
//                  выполнения текущего вызова.
//     * ЗаписаноНаДискЗа5Минут - Число - содержит количество данных в байтах, записанных на диск сеансом за
//                  последние 5 минут.
//     * УправлениеНаходитсяНаСервере - Число - указывает, находится ли управление на сервере (0 - не находится, 1 - находится).
//
Функция СвойстваСоединения() Экспорт
	
	Результат = Новый Структура();
	
	Результат.Вставить("Номер");
	Результат.Вставить("ИмяПользователя");
	Результат.Вставить("ИмяКлиентскогоКомпьютера");
	Результат.Вставить("ИдентификаторКлиентскогоПриложения");
	Результат.Вставить("МоментУстановкиСоединения");
	Результат.Вставить("РежимСоединенияСИнформационнойБазой");
	Результат.Вставить("РежимСоединенияСБазойДанных");
	Результат.Вставить("БлокировкаСУБД");
	Результат.Вставить("Передано");
	Результат.Вставить("ПереданоЗа5Минут");
	Результат.Вставить("СерверныхВызовов");
	Результат.Вставить("СерверныхВызововЗа5Минут");
	Результат.Вставить("ПереданоСУБД");
	Результат.Вставить("ПереданоСУБДЗа5Минут");
	Результат.Вставить("СоединениеСУБД");
	Результат.Вставить("ВремяСУБД");
	Результат.Вставить("МоментЗахватаСоединенияСУБД");
	Результат.Вставить("ДлительностьСерверныхВызовов");
	Результат.Вставить("ДлительностьВызововСУБД");
	Результат.Вставить("ДлительностьТекущегоСерверногоВызова");
	Результат.Вставить("ДлительностьТекущегоВызоваСУБД");
	Результат.Вставить("ДлительностьСерверныхВызововЗа5Минут");
	Результат.Вставить("ДлительностьВызововСУБДЗа5Минут");
	Результат.Вставить("ПрочитаноСДиска");
	Результат.Вставить("ПрочитаноСДискаВТекущемВызове");
	Результат.Вставить("ПрочитаноСДискаЗа5Минут");
	Результат.Вставить("ЗанятоПамяти");
	Результат.Вставить("ЗанятоПамятиВТекущемВызове");
	Результат.Вставить("ЗанятоПамятиЗа5Минут");
	Результат.Вставить("ЗаписаноНаДиск");
	Результат.Вставить("ЗаписаноНаДискВТекущемВызове");
	Результат.Вставить("ЗаписаноНаДискЗа5Минут");
	Результат.Вставить("УправлениеНаходитсяНаСервере");
	
	Возврат Результат;
	
КонецФункции

// Возвращает описания соединений с информационной базой.
//
// Параметр ПараметрыАдминистрированияИБ может быть опущен в том случае, если аналогичные поля указаны 
// в параметре ПараметрыАдминистрированияКластера.
// Если в параметре Фильтр задана структура (см. АдминистрированиеКластера.ФильтрСеансов), то 
// сравнение всегда выполняется на равенство.
//
// Параметры:
//   ПараметрыАдминистрированияКластера - см. АдминистрированиеКластера.ПараметрыАдминистрированияКластера
//   ПараметрыАдминистрированияИБ - см. АдминистрированиеКластера.ПараметрыАдминистрированияИнформационнойБазыКластера
//   Фильтр - см. АдминистрированиеКластера.ФильтрСоединений 
//          - Массив из см. АдминистрированиеКластера.ФильтрСоединений
//
// Возвращаемое значение: 
//   Массив из см. АдминистрированиеКластера.СвойстваСоединения
//
Функция СоединенияСИнформационнойБазой(Знач ПараметрыАдминистрированияКластера, Знач ПараметрыАдминистрированияИБ = Неопределено, 
	Знач Фильтр = Неопределено) Экспорт
	
	Если ПараметрыАдминистрированияИБ = Неопределено Тогда
		ПараметрыАдминистрированияИБ = ПараметрыАдминистрированияКластера;
	КонецЕсли;
	
	МенеджерАдминистрирования = МенеджерАдминистрирования(ПараметрыАдминистрированияКластера);
	
	Возврат МенеджерАдминистрирования.СоединенияСИнформационнойБазой(
		ПараметрыАдминистрированияКластера,
		ПараметрыАдминистрированияИБ,
		Фильтр);
	
КонецФункции

// Разрывает соединения с информационной базой по фильтру.
//
// Параметр ПараметрыАдминистрированияИБ может быть опущен в том случае, если аналогичные поля указаны 
// в параметре ПараметрыАдминистрированияКластера.
// Если в параметре Фильтр задана структура (см. АдминистрированиеКластера.ФильтрСоединений), то 
// сравнение всегда выполняется на равенство.
//
// Параметры:
//   ПараметрыАдминистрированияКластера - см. АдминистрированиеКластера.ПараметрыАдминистрированияКластера
//   ПараметрыАдминистрированияИБ - см. АдминистрированиеКластера.ПараметрыАдминистрированияИнформационнойБазыКластера
//   Фильтр - Массив из см. АдминистрированиеКластера.ФильтрСоединений
//          - см. АдминистрированиеКластера.ФильтрСоединений
//
Процедура РазорватьСоединенияСИнформационнойБазой(Знач ПараметрыАдминистрированияКластера, Знач ПараметрыАдминистрированияИБ = Неопределено, 
	Знач Фильтр = Неопределено) Экспорт
	
	Если ПараметрыАдминистрированияИБ = Неопределено Тогда
		ПараметрыАдминистрированияИБ = ПараметрыАдминистрированияКластера;
	КонецЕсли;
	
	МенеджерАдминистрирования = МенеджерАдминистрирования(ПараметрыАдминистрированияКластера);
	
	МенеджерАдминистрирования.РазорватьСоединенияСИнформационнойБазой(
		ПараметрыАдминистрированияКластера,
		ПараметрыАдминистрированияИБ,
		Фильтр);
	
КонецПроцедуры

// Свойства фильтра соединений.
// Для использования в функциях СоединенияСИнформационнойБазой, РазорватьСоединенияСИнформационнойБазой и аналогичных. 
//
// Возвращаемое значение:
//   Структура:
//     * Свойство - Строка - имя свойства, по которому осуществляется фильтрация. 
//                  Допустимые значения - см. возвращаемое значение функции АдминистрированиеКластера.СвойстваСоединения.
//     * ВидСравнения - ВидСравнения - вид сравнения значений сеансов с указанным в условии фильтра. 
//                  Допустимые значения:
//                  ВидСравнения.Равно,
//                  ВидСравнения.НеРавно,
//                  ВидСравнения.Больше (только для числовых значений),
//                  ВидСравнения.БольшеИлиРавно (только для числовых значений),
//                  ВидСравнения.Меньше (только для числовых значений),
//                  ВидСравнения.МеньшеИлиРавно (только для числовых значений),
//                  ВидСравнения.ВСписке,
//                  ВидСравнения.НеВСписке,
//                  ВидСравнения.Интервал (только для числовых значений),
//                  ВидСравнения.ИнтервалВключаяГраницы (только для числовых значений),
//                  ВидСравнения.ИнтервалВключаяНачало (только для числовых значений),
//                  ВидСравнения.ИнтервалВключаяОкончание (только для числовых значений).
//     * Значение - Число
//                - Строка
//                - Дата
//                - Булево
//                - СписокЗначений
//                - Массив
//                - Структура - значение, с которым
//               сравнивается значение соответствующего свойства сеанса. При ВидСравнения.ВСписке и ВидСравнения.НеВСписке
//               в качестве значения должны передаваться СписокЗначений или Массив, содержащие набор значений, с которыми
//               будет выполняться сравнение. При ВидСравнения.Интервал, ВидСравнения.ИнтервалВключаяГраницы,
//               ВидСравнения.ИнтервалВключаяНачало и ВидСравнения.ИнтервалВключаяОкончание в качестве значения должны
//               передаваться структуры с полями С и По, значения которых образуют интервал, с которым будет выполняться
//               соответствующее сравнение.
//
Функция ФильтрСоединений() Экспорт
	
	Результат = Новый Структура();
	
	Результат.Вставить("Свойство");
	Результат.Вставить("ВидСравнения", ВидСравнения.Равно);
	Результат.Вставить("Значение");
	
	Возврат Результат;
	
КонецФункции

#КонецОбласти

#Область ПрофилиБезопасности

// Возвращает имя профиля безопасности, назначенного для информационной базы.
//
// Параметр ПараметрыАдминистрированияИБ может быть опущен в том случае, если аналогичные поля указаны 
// в параметре ПараметрыАдминистрированияКластера.
//
// Параметры:
//   ПараметрыАдминистрированияКластера - см. АдминистрированиеКластера.ПараметрыАдминистрированияКластера
//   ПараметрыАдминистрированияИБ - см. АдминистрированиеКластера.ПараметрыАдминистрированияИнформационнойБазыКластера
//
// Возвращаемое значение: 
//   Строка - имя профиля безопасности, назначенного для информационной базы. Если для информационной базы не назначен
//            профиль безопасности - возвращается пустая строка.
//
Функция ПрофильБезопасностиИнформационнойБазы(Знач ПараметрыАдминистрированияКластера, Знач ПараметрыАдминистрированияИБ = Неопределено) Экспорт
	
	Если ПараметрыАдминистрированияИБ = Неопределено Тогда
		ПараметрыАдминистрированияИБ = ПараметрыАдминистрированияКластера;
	КонецЕсли;
	
	МенеджерАдминистрирования = МенеджерАдминистрирования(ПараметрыАдминистрированияКластера);
	
	Возврат МенеджерАдминистрирования.ПрофильБезопасностиИнформационнойБазы(
		ПараметрыАдминистрированияКластера,
		ПараметрыАдминистрированияИБ);
	
КонецФункции

// Возвращает имя профиля безопасности, назначенного для информационной базы в качестве профиля безопасности
// безопасного режима.
//
// Параметр ПараметрыАдминистрированияИБ может быть опущен в том случае, если аналогичные поля указаны 
// в параметре ПараметрыАдминистрированияКластера.
//
// Параметры:
//   ПараметрыАдминистрированияКластера - см. АдминистрированиеКластера.ПараметрыАдминистрированияКластера
//   ПараметрыАдминистрированияИБ - см. АдминистрированиеКластера.ПараметрыАдминистрированияИнформационнойБазыКластера
//
// Возвращаемое значение: 
//   Строка - имя профиля безопасности, назначенного для информационной базы в качестве профиля безопасности безопасного
//            режима. Если для информационной базы не назначен профиль безопасности - возвращается пустая строка.
//
Функция ПрофильБезопасностиБезопасногоРежимаИнформационнойБазы(Знач ПараметрыАдминистрированияКластера, Знач ПараметрыАдминистрированияИБ = Неопределено) Экспорт
	
	Если ПараметрыАдминистрированияИБ = Неопределено Тогда
		ПараметрыАдминистрированияИБ = ПараметрыАдминистрированияКластера;
	КонецЕсли;
	
	МенеджерАдминистрирования = МенеджерАдминистрирования(ПараметрыАдминистрированияКластера);
	
	Возврат МенеджерАдминистрирования.ПрофильБезопасностиБезопасногоРежимаИнформационнойБазы(
		ПараметрыАдминистрированияКластера,
		ПараметрыАдминистрированияИБ);
	
КонецФункции

// Назначает для информационной базы использование профиля безопасности.
//
// Параметр ПараметрыАдминистрированияИБ может быть опущен в том случае, если аналогичные поля указаны 
// в параметре ПараметрыАдминистрированияКластера.
//
// Параметры:
//   ПараметрыАдминистрированияКластера - см. АдминистрированиеКластера.ПараметрыАдминистрированияКластера
//   ПараметрыАдминистрированияИБ - см. АдминистрированиеКластера.ПараметрыАдминистрированияИнформационнойБазыКластера
//   ИмяПрофиля - Строка - имя профиля безопасности. Если передана пустая строка - для информационной базы будет 
//                         отключено использование профиля безопасности.
//
Процедура УстановитьПрофильБезопасностиИнформационнойБазы(Знач ПараметрыАдминистрированияКластера, Знач ПараметрыАдминистрированияИБ = Неопределено, 
	Знач ИмяПрофиля = "") Экспорт
	
	Если ПараметрыАдминистрированияИБ = Неопределено Тогда
		ПараметрыАдминистрированияИБ = ПараметрыАдминистрированияКластера;
	КонецЕсли;
	
	МенеджерАдминистрирования = МенеджерАдминистрирования(ПараметрыАдминистрированияКластера);
	
	МенеджерАдминистрирования.УстановитьПрофильБезопасностиИнформационнойБазы(
		ПараметрыАдминистрированияКластера,
		ПараметрыАдминистрированияИБ,
		ИмяПрофиля);
	
КонецПроцедуры

// Назначает для информационной базы использование профиля безопасности безопасного режима.
//
// Параметр ПараметрыАдминистрированияИБ может быть опущен в том случае, если аналогичные поля указаны 
// в параметре ПараметрыАдминистрированияКластера.
//
// Параметры:
//   ПараметрыАдминистрированияКластера - см. АдминистрированиеКластера.ПараметрыАдминистрированияКластера
//   ПараметрыАдминистрированияИБ - см. АдминистрированиеКластера.ПараметрыАдминистрированияИнформационнойБазыКластера
//   ИмяПрофиля - Строка - имя профиля безопасности. Если передана пустая строка - для информационной базы будет 
//                         отключено использование профиля безопасности безопасного режима.
//
Процедура УстановитьПрофильБезопасностиБезопасногоРежимаИнформационнойБазы(Знач ПараметрыАдминистрированияКластера, Знач ПараметрыАдминистрированияИБ = Неопределено, Знач ИмяПрофиля = "") Экспорт
	
	Если ПараметрыАдминистрированияИБ = Неопределено Тогда
		ПараметрыАдминистрированияИБ = ПараметрыАдминистрированияКластера;
	КонецЕсли;
	
	МенеджерАдминистрирования = МенеджерАдминистрирования(ПараметрыАдминистрированияКластера);
	
	МенеджерАдминистрирования.УстановитьПрофильБезопасностиБезопасногоРежимаИнформационнойБазы(
		ПараметрыАдминистрированияКластера,
		ПараметрыАдминистрированияИБ,
		ИмяПрофиля);
	
КонецПроцедуры

// Проверяет существование в кластере серверов профиля безопасности.
//
// Параметры:
//   ПараметрыАдминистрированияКластера - см. АдминистрированиеКластера.ПараметрыАдминистрированияКластера.
//   ИмяПрофиля - Строка - имя профиля безопасности, существование которого проверяется.
//
// Возвращаемое значение:
//   Булево
//
Функция ПрофильБезопасностиСуществует(Знач ПараметрыАдминистрированияКластера, Знач ИмяПрофиля) Экспорт
	
	МенеджерАдминистрирования = МенеджерАдминистрирования(ПараметрыАдминистрированияКластера);
	
	Возврат МенеджерАдминистрирования.ПрофильБезопасностиСуществует(
		ПараметрыАдминистрированияКластера,
		ИмяПрофиля);
	
КонецФункции

// Свойства профиля безопасности.
//
// Возвращаемое значение: 
//   Структура:
//     * Имя - Строка - имя профиля безопасности,
//     * Описание - Строка - описание профиля безопасности,
//     * ПрофильБезопасногоРежима - Булево - определяет возможность использования профиля безопасности
//                  в качестве профиля безопасности безопасного режима (как при указании в качестве профиля
//                  безопасного режима для информационной базы, так и при вызове.
//                  УстановитьБезопасныйРежим(<Имя профиля>) из кода конфигурации.
//     * ПолныйДоступКПривилегированномуРежиму - Булево - определяет возможность установки
//                  привилегированного режима из безопасного режима данного профиля безопасности.
//     * ПолныйДоступКФункциямКриптографии - Булево - определяет разрешение на использование криптографического
//                  функционала (подпись, проверка подписи, шифрование, расшифрование, работа с хранилищем сертификатов,
//                  проверка сертификатов, извлечение сертификатов из подписи) при работе на сервере.
//                  На клиенте функции криптографии не блокируются. 
//                  Истина - исполнение разрешено. Ложь - исполнение запрещено.
//     * ПолныйДоступКРасширениюВсехМодулей - Булево - определяет, разрешено ли изменение всех модулей в расширении
//                  конфигурации:
//                     Истина - разрешено расширять любой модуль.
//                     Ложь - разрешено расширять модули из списка разрешенных.
//     * ДоступныеДляРасширенияМодули - Строка - используется, когда расширение всех модулей не разрешено.
//                  Содержит список полных имен объектов конфигурации или модулей, расширение которых разрешено, 
//                  разделенных ";". Указание полного имени объекта конфигурации разрешает расширение всех модулей
//                  объекта. Указанием полного имени модуля разрешает расширение конкретного модуля.
//     * НедоступныеДляРасширенияМодули - Строка - используется, когда расширение всех модулей разрешено.
//                  Содержит список полных имен объектов конфигурации или модулей, расширение которых не разрешено,
//                  разделенных ";". Указание полного имени объекта конфигурации запрещает расширение всех модулей
//                  объекта.
//     * ПолныйДоступКРасширениюПравДоступа - Булево - определяет, разрешено ли повышение прав на объекты конфигурации
//                  расширениями, ограниченными профилем безопасности: 
//                     Истина - повышение прав разрешено. 
//                     Ложь - повышение прав не разрешено. 
//                  Если указан список ролей расширяемой конфигурации, допускается повышение права, если хотя бы одна
//                  роль из списка включает в себя требуемое право.
//     * РолиОграничивающиеРасширениеПравДоступа - Строка - содержит список имен ролей, влияющих на изменение прав
//                  доступа из расширения. При изменении списка ролей изменения в составе ролей учитываются только после
//                  перезапуска текущих сеансов и для новых сеансов.
//     * ПолныйДоступКФайловойСистеме - Булево - определяет наличие ограничений на доступ к файловой
//                  системе. При установке значения Ложь доступ будет предоставлен только к каталогам файловой
//                  системы, перечисленным в свойстве ВиртуальныеКаталоги.
//     * ПолныйДоступКCOMОбъектам - Булево - определяет наличие ограничений на доступ к использованию.
//                  COM-объектов. При установке значения равным Ложь, доступ будет предоставлен только к COM-классам,
//                  перечисленным в свойстве COM-классы.
//     * ПолныйДоступКВнешнимКомпонентам - Булево - определяет наличие ограничений на доступ к использованию
//                  внешних компонент. При установке значения равным Ложь, доступ будет предоставлен только к внешним
//                  компонентам, перечисленным в свойстве ВнешниеКомпоненты.
//     * ПолныйДоступКВнешнимМодулям - Булево - определяет наличие ограничений на доступ к использованию внешних 
//                  модулей (внешние отчеты и обработки, вызовы Выполнить() и Вычислить()) в небезопасном режиме.
//                  При установке значения равным Ложь, будет предоставлена возможность использовать в небезопасном
//                  режиме только внешние модули, перечисленные в свойстве ВнешниеМодули.
//     * ПолныйДоступКПриложениямОперационнойСистемы - Булево - определяет наличие ограничений на доступ к
//                  использованию приложений операционной системы. При установке значения равным Ложь, будет
//                  предоставлена возможность использовать только приложения операционной системы, перечисленные в
//                  свойстве ПриложенияОС.
//     * ПолныйДоступКИнтернетРесурсам - Булево - определяет наличие ограничений на доступ к использованию
//                  интернет-ресурсов. При установке значения равным Ложь, будет предоставлена возможность использовать
//                  только интернет-ресурсы, перечисленные в свойстве интернетРесурсы.
//     * ВиртуальныеКаталоги - Массив из см. АдминистрированиеКластера.СвойстваВиртуальногоКаталога
//     * COMКлассы - Массив из см. АдминистрированиеКластера.СвойстваCOMКласса
//     * ВнешниеКомпоненты - Массив из см. АдминистрированиеКластера.СвойстваВнешнейКомпоненты
//     * ВнешниеМодули - Массив из см. АдминистрированиеКластера.СвойстваВнешнегоМодуля
//     * ПриложенияОС - Массив из см. АдминистрированиеКластера.СвойстваПриложенияОС
//     * ИнтернетРесурсы - Массив из см. АдминистрированиеКластера.СвойстваИнтернетРесурса
//
Функция СвойстваПрофиляБезопасности() Экспорт
	
	Результат = Новый Структура();
	
	Результат.Вставить("Имя", "");
	Результат.Вставить("Описание", "");
	Результат.Вставить("ПрофильБезопасногоРежима", Ложь);
	Результат.Вставить("ПолныйДоступКПривилегированномуРежиму", Ложь);
	Результат.Вставить("ПолныйДоступКФункциямКриптографии", Ложь);
	
	Результат.Вставить("ПолныйДоступКРасширениюВсехМодулей", Ложь);
	Результат.Вставить("ДоступныеДляРасширенияМодули", "");
	Результат.Вставить("НедоступныеДляРасширенияМодули", "");
	
	Результат.Вставить("ПолныйДоступКРасширениюПравДоступа", Ложь);
	Результат.Вставить("РолиОграничивающиеРасширениеПравДоступа", "");
		
	Результат.Вставить("ПолныйДоступКФайловойСистеме", Ложь);
	Результат.Вставить("ПолныйДоступКCOMОбъектам", Ложь);
	Результат.Вставить("ПолныйДоступКВнешнимКомпонентам", Ложь);
	Результат.Вставить("ПолныйДоступКВнешнимМодулям", Ложь);
	Результат.Вставить("ПолныйДоступКПриложениямОперационнойСистемы", Ложь);
	Результат.Вставить("ПолныйДоступКИнтернетРесурсам", Ложь);
	
	Результат.Вставить("ВиртуальныеКаталоги", Новый Массив());
	Результат.Вставить("COMКлассы", Новый Массив());
	Результат.Вставить("ВнешниеКомпоненты", Новый Массив());
	Результат.Вставить("ВнешниеМодули", Новый Массив());
	Результат.Вставить("ПриложенияОС", Новый Массив());
	Результат.Вставить("ИнтернетРесурсы", Новый Массив());
	
	Возврат Результат;
	
КонецФункции

// Свойства виртуального каталога, к которому предоставляется доступ.
//
// Возвращаемое значение: 
//    Структура:
//     * ЛогическийURL - Строка - логический URL каталога.
//     * ФизическийURL - Строка - физический URL каталога на сервере для размещения данных виртуального каталога.
//     * Описание - Строка - описание виртуального каталога.
//     * ЧтениеДанных - Булево - флаг разрешения чтения данных из виртуального каталога.
//     * ЗаписьДанных - Булево - флаг разрешения записи данных в виртуальный каталог.
//
Функция СвойстваВиртуальногоКаталога() Экспорт
	
	Результат = Новый Структура();
	
	Результат.Вставить("ЛогическийURL");
	Результат.Вставить("ФизическийURL");
	
	Результат.Вставить("Описание");
	
	Результат.Вставить("ЧтениеДанных");
	Результат.Вставить("ЗаписьДанных");
	
	Возврат Результат;
	
КонецФункции

// Свойства COM-класса, к которому предоставляется доступ.
//
// Возвращаемое значение: 
//    Структура:
//     * Имя - Строка - имя COM-класса, используется в качестве ключа при поиске.
//     * Описание - Строка - описание COM-класса.
//     * ФайлМоникер - Строка - имя файла, по которому создается объект методом глобального контекста 
//                  ПолучитьCOMОбъект() с пустым значением второго параметра.
//     * CLSID - Строка - представление идентификатора COM-класса в формате системного реестра MS Windows
//                  без фигурных скобок, по которому он может быть создан операционной системой.
//     * Компьютер - Строка - имя компьютера, на котором может быть создан COM-объект.
//
Функция СвойстваCOMКласса() Экспорт
	
	Результат = Новый Структура();
	
	Результат.Вставить("Имя");
	Результат.Вставить("Описание");
	
	Результат.Вставить("ФайлМоникер");
	Результат.Вставить("CLSID");
	Результат.Вставить("Компьютер");
	
	Возврат Результат;
	
КонецФункции

// Свойства внешней компоненты, к которой предоставляется доступ.
//
// Возвращаемое значение: 
//    Структура:
//     * Имя - Строка - имя внешней компоненты, используется в качестве ключа для поиска.
//     * Описание - Строка - описание внешней компоненты.
//     * ХешСумма - Строка - контрольная сумма разрешенной внешней компоненты, вычисленная алгоритмом SHA-1 и
//                  преобразованная к строке base64.
//
Функция СвойстваВнешнейКомпоненты() Экспорт
	
	Результат = Новый Структура();
	Результат.Вставить("Имя");
	Результат.Вставить("Описание");
	Результат.Вставить("ХешСумма");
	Результат.Вставить("ХэшСумма"); // АПК:1036 для обратной совместимости
	Возврат Результат;
	
КонецФункции

// Свойства внешнего модуля, к которому предоставляется доступ.
//
// Возвращаемое значение: 
//    Структура:
//     * Имя - Строка - имя внешнего модуля, используется в качестве ключа для поиска.
//     * Описание - Строка - описание внешнего модуля.
//     * ХешСумма - Строка - контрольная сумма разрешенного внешнего модуля, вычисленная алгоритмом SHA-1 и
//                  преобразованная к строке base64.
//
Функция СвойстваВнешнегоМодуля() Экспорт
	
	Результат = Новый Структура();
	Результат.Вставить("Имя");
	Результат.Вставить("Описание");
	Результат.Вставить("ХешСумма");
	Результат.Вставить("ХэшСумма"); // АПК:1036 для обратной совместимости
	Возврат Результат;
	
КонецФункции

// Свойства приложения операционной системы, к которому предоставляется доступ.
//
// Возвращаемое значение: 
//    Структура:
//     * Имя - Строка - имя приложения операционной системы, используется в качестве ключа для поиска.
//     * Описание - Строка - описание приложения операционной системы.
//     * ШаблонСтрокиЗапуска - Строка - шаблон строки запуска приложения (состоит из последовательности шаблонных слов,
//                  разделенных пробелами).
//
Функция СвойстваПриложенияОС() Экспорт
	
	Результат = Новый Структура();
	
	Результат.Вставить("Имя");
	Результат.Вставить("Описание");
	
	Результат.Вставить("ШаблонСтрокиЗапуска");
	
	Возврат Результат;
	
КонецФункции

// Свойства Интернет-ресурса, к которому предоставляется доступ.
//
// Возвращаемое значение: 
//    Структура:
//     * Имя - Строка - имя интернет-ресурса, используется в качестве ключа для поиска.
//     * Описание - Строка - описание интернет-ресурса.
//     * Протокол - Строка - разрешаемый сетевой протокол. Возможные значения:
//          HTTP,
//          HTTPS,
//          FTP,
//          FTPS,
//          POP3,
//          SMTP,
//          IMAP.
//     * Адрес - Строка - сетевой адрес Интернет-ресурса без указания протокола и порта.
//     * Порт - Число - сетевой порт Интернет-ресурса.
//
Функция СвойстваИнтернетРесурса() Экспорт
	
	Результат = Новый Структура();
	
	Результат.Вставить("Имя");
	Результат.Вставить("Описание");
	
	Результат.Вставить("Протокол");
	Результат.Вставить("Адрес");
	Результат.Вставить("Порт");
	
	Возврат Результат;
	
КонецФункции

// Возвращает свойства профиля безопасности.
//
// Параметры:
//   ПараметрыАдминистрированияКластера - см. АдминистрированиеКластера.ПараметрыАдминистрированияКластера
//   ИмяПрофиля - Строка - имя профиля безопасности.
//
// Возвращаемое значение: 
//   см. АдминистрированиеКластера.СвойстваПрофиляБезопасности
//
Функция ПрофильБезопасности(Знач ПараметрыАдминистрированияКластера, Знач ИмяПрофиля) Экспорт
	
	МенеджерАдминистрирования = МенеджерАдминистрирования(ПараметрыАдминистрированияКластера);
	
	Возврат МенеджерАдминистрирования.ПрофильБезопасности(
		ПараметрыАдминистрированияКластера,
		ИмяПрофиля);
	
КонецФункции

// Создает профиль безопасности по переданному описанию.
//
// Параметры:
//   ПараметрыАдминистрированияКластера - см. АдминистрированиеКластера.ПараметрыАдминистрированияКластера
//   СвойстваПрофиляБезопасности - см. АдминистрированиеКластера.СвойстваПрофиляБезопасности
//
Процедура СоздатьПрофильБезопасности(Знач ПараметрыАдминистрированияКластера, Знач СвойстваПрофиляБезопасности) Экспорт
	
	МенеджерАдминистрирования = МенеджерАдминистрирования(ПараметрыАдминистрированияКластера);
	
	МенеджерАдминистрирования.СоздатьПрофильБезопасности(
		ПараметрыАдминистрированияКластера,
		СвойстваПрофиляБезопасности);
	
КонецПроцедуры

// Устанавливает свойства для существующего профиля безопасности по переданному описанию.
//
// Параметры:
//   ПараметрыАдминистрированияКластера - см. АдминистрированиеКластера.ПараметрыАдминистрированияКластера
//   СвойстваПрофиляБезопасности - см. АдминистрированиеКластера.СвойстваПрофиляБезопасности
//
Процедура УстановитьСвойстваПрофиляБезопасности(Знач ПараметрыАдминистрированияКластера, Знач СвойстваПрофиляБезопасности)  Экспорт
	
	МенеджерАдминистрирования = МенеджерАдминистрирования(ПараметрыАдминистрированияКластера);
	
	МенеджерАдминистрирования.УстановитьСвойстваПрофиляБезопасности(
		ПараметрыАдминистрированияКластера,
		СвойстваПрофиляБезопасности);
	
КонецПроцедуры

// Удаляет профиль безопасности.
//
// Параметры:
//   ПараметрыАдминистрированияКластера - см. АдминистрированиеКластера.ПараметрыАдминистрированияКластера
//   ИмяПрофиля - Строка - имя профиля безопасности.
//
Процедура УдалитьПрофильБезопасности(Знач ПараметрыАдминистрированияКластера, Знач ИмяПрофиля) Экспорт
	
	МенеджерАдминистрирования = МенеджерАдминистрирования(ПараметрыАдминистрированияКластера);
	
	МенеджерАдминистрирования.УдалитьПрофильБезопасности(
		ПараметрыАдминистрированияКластера,
		ИмяПрофиля);
	
КонецПроцедуры

#КонецОбласти

#Область ИнформационныеБазы

// Возвращает внутренний идентификатор информационной базы.
//
// Параметры:
//   ИдентификаторКластера - Строка - внутренний идентификатор кластера серверов.
//   ПараметрыАдминистрированияКластера - см. АдминистрированиеКластера.ПараметрыАдминистрированияКластера
//   ПараметрыАдминистрированияИнформационнойБазы - см. АдминистрированиеКластера.ПараметрыАдминистрированияИнформационнойБазыКластера
//
// Возвращаемое значение: 
//   Строка
//
Функция ИдентификаторИнформационнойБазы(Знач ИдентификаторКластера, Знач ПараметрыАдминистрированияКластера, Знач ПараметрыАдминистрированияИнформационнойБазы) Экспорт
	
	МенеджерАдминистрирования = МенеджерАдминистрирования(ПараметрыАдминистрированияКластера);
	
	Возврат МенеджерАдминистрирования.ИдентификаторИнформационнойБазы(
		ИдентификаторКластера,
		ПараметрыАдминистрированияКластера,
		ПараметрыАдминистрированияИнформационнойБазы);
	
КонецФункции

// Возвращает описания информационных баз.
//
// Параметры:
//   ИдентификаторКластера - Строка - внутренний идентификатор кластера серверов.
//   ПараметрыАдминистрированияКластера - см. АдминистрированиеКластера.ПараметрыАдминистрированияКластера
//   Фильтр - Структура - параметры фильтрации информационных баз.
//
// Возвращаемое значение:
//  Массив из Структура
//
Функция СвойстваИнформационныхБаз(Знач ИдентификаторКластера, Знач ПараметрыАдминистрированияКластера, Знач Фильтр = Неопределено) Экспорт
	
	МенеджерАдминистрирования = МенеджерАдминистрирования(ПараметрыАдминистрированияКластера);
	
	Возврат МенеджерАдминистрирования.СвойстваИнформационныхБаз(
		ИдентификаторКластера,
		ПараметрыАдминистрированияКластера,
		Фильтр);
	
КонецФункции

#КонецОбласти

#Область Кластер

// Возвращает внутренний идентификатор кластера серверов.
//
// Параметры:
//  ПараметрыАдминистрированияКластера - см. АдминистрированиеКластера.ПараметрыАдминистрированияКластера.
//
// Возвращаемое значение:
//   Строка
//
Функция ИдентификаторКластера(Знач ПараметрыАдминистрированияКластера) Экспорт
	
	МенеджерАдминистрирования = МенеджерАдминистрирования(ПараметрыАдминистрированияКластера);
	
	Возврат МенеджерАдминистрирования.ИдентификаторКластера(ПараметрыАдминистрированияКластера);
	
КонецФункции

// Возвращает описания кластеров серверов.
//
// Параметры:
//   ПараметрыАдминистрированияКластера - см. АдминистрированиеКластера.ПараметрыАдминистрированияКластера
//   Фильтр - Структура - параметры фильтрации кластеров серверов.
//
// Возвращаемое значение: 
//   Массив из Структура
//
Функция СвойстваКластеров(Знач ПараметрыАдминистрированияКластера, Знач Фильтр = Неопределено) Экспорт
	
	МенеджерАдминистрирования = МенеджерАдминистрирования(ПараметрыАдминистрированияКластера);
	
	Возврат МенеджерАдминистрирования.СвойстваКластеров(ПараметрыАдминистрированияКластера, Фильтр);
	
КонецФункции

#КонецОбласти

#Область РабочиеПроцессыСерверы

// Возвращает описания рабочих процессов.
//
// Параметры:
//   ИдентификаторКластера - Строка - внутренний идентификатор кластера серверов.
//   ПараметрыАдминистрированияКластера - см. АдминистрированиеКластера.ПараметрыАдминистрированияКластера
//   Фильтр - Структура - параметры фильтрации рабочих процессов.
//
// Возвращаемое значение:
//   Массив из Структура
//
Функция СвойстваРабочихПроцессов(Знач ИдентификаторКластера, Знач ПараметрыАдминистрированияКластера, Знач Фильтр = Неопределено) Экспорт
	
	МенеджерАдминистрирования = МенеджерАдминистрирования(ПараметрыАдминистрированияКластера);
	
	Возврат МенеджерАдминистрирования.СвойстваРабочихПроцессов(
		ИдентификаторКластера,
		ПараметрыАдминистрированияКластера,
		Фильтр);
	
КонецФункции

// Возвращает описания рабочих серверов.
//
// Параметры:
//   ИдентификаторКластера - Строка - внутренний идентификатор кластера серверов.
//   ПараметрыАдминистрированияКластера - см. АдминистрированиеКластера.ПараметрыАдминистрированияКластера
//   Фильтр - Структура - параметры фильтрации рабочих серверов.
//
// Возвращаемое значение: 
//   Массив из Структура
//
Функция СвойстваРабочихСерверов(Знач ИдентификаторКластера, Знач ПараметрыАдминистрированияКластера, Знач Фильтр = Неопределено) Экспорт
	
	МенеджерАдминистрирования = МенеджерАдминистрирования(ПараметрыАдминистрированияКластера);
	
	Возврат МенеджерАдминистрирования.СвойстваРабочихСерверов(
		ИдентификаторКластера,
		ПараметрыАдминистрированияКластера,
		Фильтр);
	
КонецФункции

#КонецОбласти

// Возвращает описания сеансов информационной базы.
//
// Если в параметре Фильтр задана структура (см. АдминистрированиеКластера.ФильтрСеансов), то 
// сравнение всегда выполняется на равенство.
//
// Параметры:
//   ИдентификаторКластера - Строка - внутренний идентификатор кластера серверов.
//   ПараметрыАдминистрированияКластера - см. АдминистрированиеКластера.ПараметрыАдминистрированияКластера
//   ИдентификаторИнформационнойБазы - Строка - внутренний идентификатор информационной базы.
//   Фильтр - см. АдминистрированиеКластера.ФильтрСеансов
//          - Массив из см. АдминистрированиеКластера.ФильтрСеансов
//   ИспользоватьСловарь - Булево - если Истина - возвращаемый результат будет заполнен с использованием словаря.
//
// Возвращаемое значение: 
//   - Массив из см. АдминистрированиеКластера.СвойстваСеанса
//   - Массив из Соответствие - свойства сеансов в нотации утилиты rac (при ИспользоватьСловарь = Ложь).
//
Функция СвойстваСеансов(Знач ИдентификаторКластера, Знач ПараметрыАдминистрированияКластера, Знач ИдентификаторИнформационнойБазы, Знач Фильтр = Неопределено, Знач ИспользоватьСловарь = Истина) Экспорт
	
	МенеджерАдминистрирования = МенеджерАдминистрирования(ПараметрыАдминистрированияКластера);
	
	Возврат МенеджерАдминистрирования.СвойстваСеансов(
		ИдентификаторКластера,
		ПараметрыАдминистрированияКластера,
		ИдентификаторИнформационнойБазы,
		Фильтр,
		ИспользоватьСловарь);
	
КонецФункции

// Возвращает описания соединений с информационной базой.
//
// Параметры:
//   ИдентификаторКластера - Строка - внутренний идентификатор кластера серверов.
//   ПараметрыАдминистрированияКластера - см. АдминистрированиеКластера.ПараметрыАдминистрированияКластера
//   ИдентификаторИнформационнойБазы - Строка - внутренний идентификатор информационной базы.
//   ПараметрыАдминистрированияИнформационнойБазы - см. АдминистрированиеКластера.ПараметрыАдминистрированияИнформационнойБазыКластера
//   Фильтр - см. АдминистрированиеКластера.ФильтрСоединений
//          - Массив из см. АдминистрированиеКластера.ФильтрСоединений
//   ИспользоватьСловарь - Булево - если Истина - возвращаемый результат будет заполнен с использованием словаря.
//
// Возвращаемое значение: 
//   - Массив из см. АдминистрированиеКластера.СвойстваСоединения
//   - Массив из Соответствие - свойства соединений в нотации утилиты rac (при ИспользоватьСловарь = Ложь).
//
Функция СвойстваСоединений(Знач ИдентификаторКластера, Знач ПараметрыАдминистрированияКластера, Знач ИдентификаторИнформационнойБазы, Знач ПараметрыАдминистрированияИнформационнойБазы, Знач Фильтр = Неопределено, Знач ИспользоватьСловарь = Ложь) Экспорт
	
	МенеджерАдминистрирования = МенеджерАдминистрирования(ПараметрыАдминистрированияКластера);
	
	Возврат МенеджерАдминистрирования.СвойстваСоединений(
		ИдентификаторКластера,
		ПараметрыАдминистрированияКластера,
		ИдентификаторИнформационнойБазы,
		ПараметрыАдминистрированияИнформационнойБазы,
		Фильтр,
		ИспользоватьСловарь);
	
КонецФункции

// Возвращает путь к консольному клиенту сервера администрирования.
//
// Параметры:
//   ПараметрыАдминистрированияКластера - см. АдминистрированиеКластера.ПараметрыАдминистрированияКластера
//
// Возвращаемое значение:
//   Строка
//
Функция ПутьККлиентуСервераАдминистрирования(Знач ПараметрыАдминистрированияКластера) Экспорт
	
	МенеджерАдминистрирования = МенеджерАдминистрирования(ПараметрыАдминистрированияКластера);
	
	Возврат МенеджерАдминистрирования.ПутьККлиентуСервераАдминистрирования();
	
КонецФункции

#КонецОбласти

#Область СлужебныеПроцедурыИФункции

Процедура ДобавитьУсловиеФильтра(Фильтр, Знач Свойство, Знач ВидСравненияЗначений, Знач Значение) Экспорт
	
	Если Фильтр = Неопределено Тогда
		
		Если ВидСравненияЗначений = ВидСравнения.Равно Тогда
			
			Фильтр = Новый Структура;
			Фильтр.Вставить(Свойство, Значение);
			
		Иначе
			
			НовыйЭлементФильтра = Новый Структура("Свойство, ВидСравнения, Значение", Свойство, ВидСравненияЗначений, Значение);
			
			Фильтр = Новый Массив;
			Фильтр.Добавить(НовыйЭлементФильтра);
			
		КонецЕсли;
		
	ИначеЕсли ТипЗнч(Фильтр) = Тип("Структура") Тогда
		
		СуществующийЭлементФильтра = Новый Структура("Свойство, ВидСравнения, Значение", Фильтр.Ключ, ВидСравнения.Равно, Фильтр.Значение);
		НовыйЭлементФильтра = Новый Структура("Свойство, ВидСравнения, Значение", Свойство, ВидСравненияЗначений, Значение);
		
		Фильтр = Новый Массив;
		Фильтр.Добавить(СуществующийЭлементФильтра);
		Фильтр.Добавить(НовыйЭлементФильтра);
		
	ИначеЕсли ТипЗнч(Фильтр) = Тип("Массив") Тогда
		
		Фильтр.Добавить(Новый Структура("Свойство, ВидСравнения, Значение", Свойство, ВидСравненияЗначений, Значение));
		
	Иначе
		
		ВызватьИсключение НСтр("ru = 'Неверный тип параметра Фильтр, ожидалось <Структура> или <Массив>'");
		
	КонецЕсли;
	
КонецПроцедуры

Функция ПроверитьУсловияФильтра(Знач ПроверяемыйОбъект, Знач Фильтр = Неопределено) Экспорт
	
	Если Фильтр = Неопределено Или Фильтр.Количество() = 0 Тогда
		Возврат Истина;
	КонецЕсли;
	
	ВыполненоУсловий = 0;
	
	Для Каждого Условие Из Фильтр Цикл
		
		Если ТипЗнч(Условие) = Тип("Структура") Тогда
			
			Поле = Условие.Свойство;
			ТребуемоеЗначение = Условие.Значение;
			ВидСравненияЗначений = Условие.ВидСравнения;
			
		ИначеЕсли ТипЗнч(Условие) = Тип("КлючИЗначение") Тогда
			
			Поле = Условие.Ключ;
			ТребуемоеЗначение = Условие.Значение;
			ВидСравненияЗначений = ВидСравнения.Равно;
			
		Иначе
			
			ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
				НСтр("ru = 'Неверный тип значения параметра %1, ожидалось %2 или %3.'"),
					"Фильтр", "Структура", "КлючИЗначение");
		КонецЕсли;
		
		ПроверяемоеЗначение = ПроверяемыйОбъект[Поле];
		УсловиеВыполнено = ПроверитьУсловиеФильтра(ПроверяемоеЗначение, ВидСравненияЗначений, ТребуемоеЗначение);
		
		Если УсловиеВыполнено Тогда
			ВыполненоУсловий = ВыполненоУсловий + 1;
		Иначе
			Прервать;
		КонецЕсли;
		
	КонецЦикла;
	
	Возврат ВыполненоУсловий = Фильтр.Количество();
	
КонецФункции

Функция ПроверитьУсловиеФильтра(Знач ПроверяемоеЗначение, Знач ВидСравненияЗначений, Знач Значение)
	
	Если ВидСравненияЗначений = ВидСравнения.Равно Тогда
		
		Возврат ПроверяемоеЗначение = Значение;
		
	ИначеЕсли ВидСравненияЗначений = ВидСравнения.НеРавно Тогда
		
		Возврат ПроверяемоеЗначение <> Значение;
		
	ИначеЕсли ВидСравненияЗначений = ВидСравнения.Больше Тогда
		
		Возврат ПроверяемоеЗначение > Значение;
		
	ИначеЕсли ВидСравненияЗначений = ВидСравнения.БольшеИлиРавно Тогда
		
		Возврат ПроверяемоеЗначение >= Значение;
		
	ИначеЕсли ВидСравненияЗначений = ВидСравнения.Меньше Тогда
		
		Возврат ПроверяемоеЗначение < Значение;
		
	ИначеЕсли ВидСравненияЗначений = ВидСравнения.МеньшеИлиРавно Тогда
		
		Возврат ПроверяемоеЗначение <= Значение;
		
	ИначеЕсли ВидСравненияЗначений = ВидСравнения.ВСписке Тогда
		
		Если ТипЗнч(Значение) = Тип("СписокЗначений") Тогда
			
			Возврат Значение.НайтиПоЗначению(ПроверяемоеЗначение) <> Неопределено;
			
		ИначеЕсли ТипЗнч(Значение) = Тип("Массив") Тогда
			
			Возврат Значение.Найти(ПроверяемоеЗначение) <> Неопределено;
			
		КонецЕсли;
		
	ИначеЕсли ВидСравненияЗначений = ВидСравнения.НеВСписке Тогда
		
		Если ТипЗнч(Значение) = Тип("СписокЗначений") Тогда
			
			Возврат Значение.НайтиПоЗначению(ПроверяемоеЗначение) = Неопределено;
			
		ИначеЕсли ТипЗнч(Значение) = Тип("Массив") Тогда
			
			Возврат Значение.Найти(ПроверяемоеЗначение) = Неопределено;
			
		КонецЕсли;
		
	ИначеЕсли ВидСравненияЗначений = ВидСравнения.Интервал Тогда
		
		Возврат ПроверяемоеЗначение > Значение.С И ПроверяемоеЗначение < Значение.По;
		
	ИначеЕсли ВидСравненияЗначений = ВидСравнения.ИнтервалВключаяГраницы Тогда
		
		Возврат ПроверяемоеЗначение >= Значение.С И ПроверяемоеЗначение <= Значение.По;
		
	ИначеЕсли ВидСравненияЗначений = ВидСравнения.ИнтервалВключаяНачало Тогда
		
		Возврат ПроверяемоеЗначение >= Значение.С И ПроверяемоеЗначение < Значение.По;
		
	ИначеЕсли ВидСравненияЗначений = ВидСравнения.ИнтервалВключаяОкончание Тогда
		
		Возврат ПроверяемоеЗначение > Значение.С И ПроверяемоеЗначение <= Значение.По;
		
	КонецЕсли;
	
КонецФункции

Функция МенеджерАдминистрирования(Знач ПараметрыАдминистрирования)
	
	Если ПараметрыАдминистрирования.ТипПодключения = "COM" Тогда
		
		Возврат АдминистрированиеКластераCOM;
		
	ИначеЕсли ПараметрыАдминистрирования.ТипПодключения = "RAS" Тогда
		
		Возврат АдминистрированиеКластераRAS;
		
	Иначе
		
		ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
			НСтр("ru = 'Неизвестный тип параметра %1 (%2), ожидалось ""%3"" или ""%4"".'"),
			"ПараметрыАдминистрирования", ПараметрыАдминистрирования.ТипПодключения, "COM", "RAS");
		
	КонецЕсли;
	
КонецФункции

Функция ПустаяДата() Экспорт
	
	Возврат Дата(1, 1, 1, 0, 0, 0);
	
КонецФункции

Процедура ДанныеСеансаИзБлокировки(ДанныеСеансов, Знач ТекстБлокировки, Знач КлючСеанса, Знач ИмяИнформационнойБазы) Экспорт
	
	ТекстНРег = НРег(ТекстБлокировки);
	
	ТекстНРег = СтрЗаменить(ТекстНРег, "db(",			"бд(");
	ТекстНРег = СтрЗаменить(ТекстНРег, "(session,",		"(сеанс,");
	ТекстНРег = СтрЗаменить(ТекстНРег, ",shared",		",разделяемая");
	ТекстНРег = СтрЗаменить(ТекстНРег, ",exceptional",	",исключительная");
	ТекстНРег = СтрЗаменить(ТекстНРег, ",exclusive",	",исключительная");
	
	Если Лев(ТекстНРег, 9) = "бд(сеанс," Тогда
		ЗначенияБлокировкиСтрокой = Сред(ТекстНРег, СтрНайти(ТекстНРег, "(") + 1, СтрНайти(ТекстНРег, ")") - СтрНайти(ТекстНРег, "(") - 1);
		ЗначенияБлокировки = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(ЗначенияБлокировкиСтрокой, ",");
		Если ЗначенияБлокировки.Количество() >= 3
			И ЗначенияБлокировки[0] = "сеанс"
			И ЗначенияБлокировки[1] = НРег(ИмяИнформационнойБазы) Тогда
			
			Если СтрНайти(ЗначенияБлокировкиСтрокой, "'") > 0 Тогда
				ЗначениеРазделителя = Сред(ЗначенияБлокировкиСтрокой, СтрНайти(ЗначенияБлокировкиСтрокой, "'") + 1);
				ЗначениеРазделителя = Лев(ЗначениеРазделителя, СтрНайти(ЗначениеРазделителя, "'") - 1);
			Иначе
				ЗначениеРазделителя = "";
			КонецЕсли;
			
			ДанныеСеансов[КлючСеанса] = Новый Структура("РежимБлокировкиБД, Разделитель", ЗначенияБлокировки[2], ЗначениеРазделителя);
			
		КонецЕсли;
	КонецЕсли;
	
КонецПроцедуры

#КонецОбласти
